/**
 * @file ILogger.hh
 * @author Bono.ASUN.TamGitsun (gitsun.tam@outlook.com)
 * @brief 
 * @version 0.1
 * @date 2022-02-07
 * 
 * @copyright Copyright (c) 2022
 * 
 */


#pragma once


#include <string>


namespace TGS::utils {


class ILogger
{
public:
    static const int LEVEL_VERBOSE;
    static const int LEVEL_DEBUG;
    static const int LEVEL_INFO;
    static const int LEVEL_WARN;
    static const int LEVEL_ERROR;
    static const int LEVEL_WTF;
public:
    virtual void set_log_level(int level) = 0;

    virtual void log_v(const std::string & message) = 0;
    virtual void log_d(const std::string & message) = 0;
    virtual void log_i(const std::string & message) = 0;
    virtual void log_w(const std::string & message) = 0;
    virtual void log_e(const std::string & message) = 0;
    virtual void log_wtf(const std::string & message) = 0;

    virtual void log_v(const char * fmt, ...) = 0;
    virtual void log_d(const char * fmt, ...) = 0;
    virtual void log_i(const char * fmt, ...) = 0;
    virtual void log_w(const char * fmt, ...) = 0;
    virtual void log_e(const char * fmt, ...) = 0;
    virtual void log_wtf(const char * fmt, ...) = 0;
};


}
